package com.huishu.commons.utlis;

import com.alibaba.fastjson.JSONObject;

import java.util.regex.Pattern;

public class RegexUtils {

    /**
     * 2019 最新手机号校验
     */
    public static final String REGEX_TEL = "^(?:\\+?86)?1(?:3\\d{3}|5[^4\\D]\\d{2}|8\\d{3}|7(?:[0-35-9]\\d{2}|4(?:0\\d|1[0-2]|9\\d))|9[0-35-9]\\d{2}|6[2567]\\d{2}|4(?:(?:10|4[01])\\d{3}|[68]\\d{4}|[579]\\d{2}))\\d{6}$";
    /**
     * 正则：身份证号码15位
     */
    public static final String REGEX_ID_NUM15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
    /**
     * 正则：身份证号码18位
     */
    public static final String REGEX_ID_NUM18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9Xx])$";
    /**
     * 正则：邮箱
     */
    public static final String REGEX_EMAIL = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";

    /**
     * 正则: 微信
     */
    public static final String REGEX_WXREG = "^[a-zA-Z]{1}[-_a-zA-Z0-9]{5,19}$";

    /**
     * 正则：Base64
     */
    public static final String REGEX_BASE64 = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";


    /**
     * 验证电话号码
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isPhone(CharSequence input) {
        return isMatch(REGEX_TEL, input);
    }

    /**
     * 验证身份证号码15位
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isIdNum15(CharSequence input) {
        return isMatch(REGEX_ID_NUM15, input);
    }

    /**
     * 验证身份证号码18位
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isIdNum18(CharSequence input) {
        return isMatch(REGEX_ID_NUM18, input);
    }

    /**
     * 验证邮箱
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isEmail(CharSequence input) {
        return isMatch(REGEX_EMAIL, input);
    }

    /**
     * 验证支付宝账号信息
     *
     * @param input 待验证文本
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isAliPayAccount(CharSequence input) {
        return isPhone(input) || isEmail(input);
    }

    /**
     * 判断是否匹配正则
     *
     * @param regex 正则表达式
     * @param input 要匹配的字符串
     * @return {@code true}: 匹配<br>{@code false}: 不匹配
     */
    public static boolean isMatch(String regex, CharSequence input) {
        return input != null && input.length() > 0 && Pattern.matches(regex, input);
    }

    /**
     * 判断是不是json
     *
     * @param body
     * @return
     */
    public static boolean isJSON(String body) {
        try {
            JSONObject jsonStr = JSONObject.parseObject(body);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 判断微信号
     *
     * @param input
     * @return
     */
    public static boolean isWx(CharSequence input) {
        return isMatch(REGEX_WXREG, input);
    }

    /**
     * 判断字符串是不是Base64
     *
     * @param input
     * @return
     */
    public static boolean isBase64(CharSequence input) {
        return isMatch(REGEX_BASE64, input);
    }


    public static void main(String[] args) {
        System.out.println(isAliPayAccount("18819030340"));
    }

}
